/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controller;

import java.util.ArrayList;
import model.Baum;
import model.Kante;
import model.Knoten;
import model.Pfad;
import model.Tabelle;

/**
 *
 * @author ms0022
 */
public class PfadErsteller {

    private Baum baum;

    private ArrayList<Knoten> pfadKnotenListe = new ArrayList<>();

    private ArrayList<Kante> pfadKantenListe = new ArrayList<>();

    private Tabelle tabelle;

    public PfadErsteller(Baum baum, Tabelle tabelle) {
        this.baum = baum;
        this.tabelle = tabelle;
    }

    public Pfad createPfad(String[] data) {
        Knoten parent = null;
        int index = -1;
        for (int i = 0; i < baum.getKanten().size(); i++) {
            if (i == 0) {
                parent = baum.getKanten().get(0).getStartKnoten();
            }
            if (index == -1) {
                for (int j = 0; j < tabelle.getListe().get(0).getEintrage().length; j++) {
                    if (parent.getLabel().equals(tabelle.getListe().get(0).getEintrage()[j])) {
                        index = j;
                        break;
                    }
                }
            }
            if (index != -1) {
                if (baum.getKanten().get(i).getLabel().equals(data[index]) && parent.equals(baum.getKanten().get(i).getStartKnoten())) {
                    pfadKantenListe.add(baum.getKanten().get(i));
                    parent = pfadKantenListe.get(pfadKantenListe.size() - 1).getEndKnoten();
                    index = -1;
                } else if (baum.getKanten().get(i).getLabel().contains("<=")) {
                    if (Double.parseDouble(data[index]) <= Double.parseDouble(baum.getKanten().get(i).getLabel().substring(2))) {
                        pfadKantenListe.add(baum.getKanten().get(i));
                        parent = pfadKantenListe.get(pfadKantenListe.size() - 1).getEndKnoten();
                        index = -1;
                    }
                } else if (baum.getKanten().get(i).getLabel().contains(">") && baum.getKanten().get(i).getLabel().contains("<=")) {
                    int indexUntereGrenze = baum.getKanten().get(i).getLabel().indexOf(",");
                    int indexObereGrenze = baum.getKanten().get(i).getLabel().indexOf("<=") + 2;
                    String unterGrenze = baum.getKanten().get(i).getLabel().substring(1, indexUntereGrenze);
                    String oberGrenze = baum.getKanten().get(i).getLabel().substring(indexObereGrenze);
                    if (Double.parseDouble(data[index]) > Double.parseDouble(unterGrenze) && Double.parseDouble(data[index]) <= Double.parseDouble(oberGrenze)) {
                        pfadKantenListe.add(baum.getKanten().get(i));
                        parent = pfadKantenListe.get(pfadKantenListe.size() - 1).getEndKnoten();
                        index = -1;
                    }
                } else if (baum.getKanten().get(i).getLabel().contains(">") && !baum.getKanten().get(i).getLabel().contains("<=")) {
                    if (Double.parseDouble(data[index]) > Double.parseDouble(baum.getKanten().get(i).getLabel().substring(1))) {
                        pfadKantenListe.add(baum.getKanten().get(i));
                        parent = pfadKantenListe.get(pfadKantenListe.size() - 1).getEndKnoten();
                        index = -1;
                    }
                }
            }
        }
        for (int i = 0; i < pfadKantenListe.size(); i++) {
            if (i == 0) {
                pfadKnotenListe.add(pfadKantenListe.get(i).getStartKnoten());
            }
            pfadKnotenListe.add(pfadKantenListe.get(i).getEndKnoten());
        }
        return new Pfad(pfadKnotenListe, pfadKantenListe);
    }
}
